/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tbp.model.domain;

import br.com.tbp.model.domain.constant.Departamento;
import br.com.tbp.utils.DateUtils;
import java.sql.Timestamp;
import java.util.Date;

/**
 *
 * @author Diego
 */
public class SituacaoInterna {

    private long id;
    private Departamento departamento;
    private Timestamp dataDeEntrada;
    private Timestamp dataDeSaida;
    private int tempoEmDias;
    private boolean atual;
    private String observacoes;
    private Pedido pedido;

    public SituacaoInterna(Departamento dep, Timestamp data, String obs, Pedido p) {
        this.departamento = dep;
        this.dataDeEntrada = data;
        this.observacoes = obs;
        this.atual = true;
        this.pedido = p;
    }

    public SituacaoInterna(long id) {
        this.id = id;
    }

    public String calculaDuracao() {
        if (dataDeSaida == null) {
            return "";
        }
        int diferencaEmDias = DateUtils.diferencaEmDias(dataDeEntrada, dataDeSaida);
        if (diferencaEmDias > 0) {
            this.tempoEmDias = diferencaEmDias;
            return this.tempoEmDias + "d";
        } else {
            this.tempoEmDias = 0;
            long horas = DateUtils.diferencaEmHoras(dataDeEntrada, dataDeSaida);
            long minutos = DateUtils.diferencaEmMinutos(dataDeEntrada, dataDeSaida);
            long segundos = DateUtils.diferencaEmSegundos(dataDeEntrada, dataDeSaida);
            if (horas > 0) {
                return horas + "d" + minutos + "m";
            } else if (minutos > 0) {
                return minutos + "m";
            } else {
                if (segundos > 0) {
                    return segundos + "s";
                } else {
                    return "0s";
                }
            }
        }
    }

    public boolean isAtual() {
        return atual;
    }

    public Timestamp getDataDeEntrada() {
        return dataDeEntrada;
    }

    public Timestamp getDataDeSaida() {
        return dataDeSaida;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public long getId() {
        return id;
    }

    public int getTempoEmDias() {
        return tempoEmDias;
    }

    public void setAtual(boolean atual) {
        this.atual = atual;
    }

    public void setDataDeEntrada(Timestamp dataDeEntrada) {
        this.dataDeEntrada = dataDeEntrada;
    }

    public void setDataDeSaida(Timestamp dataDeSaida) {
        this.dataDeSaida = dataDeSaida;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    public void finaliza() {
        setAtual(false);
        setDataDeSaida(new Timestamp(new Date().getTime()));
        calculaDuracao();
    }

    public Pedido getPedido() {
        return pedido;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final SituacaoInterna other = (SituacaoInterna) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 97 * hash + (int) (this.id ^ (this.id >>> 32));
        return hash;
    }
}
